package com.chris.libs.devtools.x.v1.utils;

import androidx.annotation.NonNull;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;

/**
 * Created by Chris Chan
 * 2020/4/27 1:45
 * Use for:
 * Explain:
 */
public class StringUtil extends UtilsManager {
    /**
     * 判断一个字符串是否为空或空字符串
     *
     * @param str
     * @return
     */
    public static boolean isEmpty(String str) {
        return null == str || "".equals(str.trim());
    }

    /**
     * 判断一个字符串是否不为空或空字符串
     *
     * @param str
     * @return
     */
    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }

    /**
     * 如果字符串不为空则返回，否则取默认值
     *
     * @param str
     * @param def
     * @return
     */
    public static String ifNotEmpty(String str, @NotNull String def) {
        return isNotEmpty(str) ? str : def;
    }

    /**
     * 判断一个字符串列表是否全部为空
     *
     * @param strList
     * @return
     */
    public static boolean isAllEmpty(List<String> strList) {
        if (null == strList || strList.size() == 0) {
            return true;
        }
        for (String str : strList) {
            //一个不为空即为false
            if (isNotEmpty(str)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断一个字符串集合是否全部为空或者空字符串
     *
     * @param strSet
     * @return
     */
    public static boolean isAllEmpty(Set<String> strSet) {
        if (null == strSet || strSet.size() == 0) {
            return true;
        }
        ArrayList<String> strList = new ArrayList<>(16);
        strList.addAll(strSet);
        return isAllEmpty(strList);
    }

    /**
     * 判断一个字符串数组是否全部为空或者空字符串
     *
     * @param strs
     * @return
     */
    public static boolean isAllEmpty(String... strs) {
        if (null == strs || strs.length == 0) {
            return true;
        }
        return isAllEmpty(Arrays.asList(strs));
    }

    /**
     * 判断一个字符串列表是否全部不为空
     *
     * @param strList
     * @return
     */
    public static boolean isAllNotEmpty(List<String> strList) {
        if (null == strList || strList.size() == 0) {
            return false;
        }
        for (String str : strList) {
            //一个为空即为false
            if (isEmpty(str)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断一个字符串集合是否全部不为空或者空字符串
     *
     * @param strSet
     * @return
     */
    public static boolean isAllNotEmpty(Set<String> strSet) {
        if (null == strSet || strSet.size() == 0) {
            return false;
        }
        ArrayList<String> strList = new ArrayList<>(16);
        strList.addAll(strSet);
        return isAllNotEmpty(strList);
    }

    /**
     * 判断一个字符串数组是否全部不为空或者空字符串
     *
     * @param strs
     * @return
     */
    public static boolean isAllNotEmpty(String... strs) {
        if (null == strs || strs.length == 0) {
            return false;
        }
        return isAllNotEmpty(Arrays.asList(strs));
    }

    /**
     * 判断一个字符串列表是否至少有一个为空
     *
     * @param strList
     * @return
     */
    public static boolean isOneEmpty(List<String> strList) {
        if (null == strList || strList.size() == 0) {
            return true;
        }
        for (String str : strList) {
            //一个为空即为true
            if (isEmpty(str)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断一个字符串集合是否至少一个为空或者空字符串
     *
     * @param strSet
     * @return
     */
    public static boolean isOneEmpty(Set<String> strSet) {
        if (null == strSet || strSet.size() == 0) {
            return true;
        }
        ArrayList<String> strList = new ArrayList<>(16);
        strList.addAll(strSet);
        return isOneEmpty(strList);
    }

    /**
     * 判断一个字符串数组是否至少有一个为空或者空字符串
     *
     * @param strs
     * @return
     */
    public static boolean isOneEmpty(String... strs) {
        if (null == strs || strs.length == 0) {
            return true;
        }
        return isOneEmpty(Arrays.asList(strs));
    }

    /**
     * 判断一个字符串列表是否至少有一个不为空
     *
     * @param strList
     * @return
     */
    public static boolean isOneNotEmpty(List<String> strList) {
        if (null == strList || strList.size() == 0) {
            return false;
        }
        for (String str : strList) {
            //一个不为空即为true
            if (isNotEmpty(str)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断一个字符串集合是否至少有一个不为空或者空字符串
     *
     * @param strSet
     * @return
     */
    public static boolean isOneNotEmpty(Set<String> strSet) {
        if (null == strSet || strSet.size() == 0) {
            return false;
        }
        ArrayList<String> strList = new ArrayList<>(16);
        strList.addAll(strSet);
        return isOneNotEmpty(strList);
    }

    /**
     * 判断一个字符串数组是否至少有一个不为空或者空字符串
     *
     * @param strs
     * @return
     */
    public static boolean isOneNotEmpty(String... strs) {
        if (null == strs || strs.length == 0) {
            return false;
        }
        return isOneNotEmpty(Arrays.asList(strs));
    }

}
